#!/usr/bin/env php
<?php

/**

title=测试 aiModel::updatePrompt();
timeout=0
cid=0

- 执行aiTest模块的updatePromptTest方法，参数是$prompt, $originalPrompt  @1
- 执行aiTest模块的updatePromptTest方法，参数是$prompt2, $originalPrompt2  @1
- 执行aiTest模块的updatePromptTest方法，参数是$prompt3, $originalPrompt3  @1
- 执行aiTest模块的updatePromptTest方法，参数是$prompt4, null  @1
- 执行aiTest模块的updatePromptTest方法，参数是$prompt5, null 第name条的0属性 @该名称已使用，请尝试其他名称。
- 执行aiTest模块的updatePromptTest方法，参数是$prompt6, null 第name条的0属性 @『name』不能为空。

*/

include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/ai.unittest.class.php';

$table = zenData('ai_prompt');
$table->id->range('1-10');
$table->name->range('提示1,提示2,提示3,提示4,提示5,提示6,提示7,提示8,提示9,提示10');
$table->desc->range('描述1,描述2,描述3,描述4,描述5,描述6,描述7,描述8,描述9,描述10');
$table->module->range('story,task,bug,user,project{5}');
$table->status->range('draft{5},active{5}');
$table->createdBy->range('admin{10}');
$table->createdDate->range('`2023-01-01 10:00:00`');
$table->editedBy->range('admin');
$table->editedDate->range('`2023-01-01 11:00:00`');
$table->deleted->range('0{10}');
$table->gen(10);

su('admin');

$aiTest = new aiTest();

// 测试步骤1：正常更新提示信息
$prompt = new stdClass();
$prompt->id = 1;
$prompt->name = '更新后的提示1';
$prompt->desc = '更新后的描述1';
$prompt->module = 'story';
$prompt->status = 'active';

$originalPrompt = new stdClass();
$originalPrompt->id = 1;
$originalPrompt->name = '提示1';
$originalPrompt->desc = '描述1';
$originalPrompt->module = 'story';
$originalPrompt->status = 'draft';
$originalPrompt->createdBy = 'admin';

r($aiTest->updatePromptTest($prompt, $originalPrompt)) && p() && e('1');

// 测试步骤2：仅修改状态为draft（取消发布）
$prompt2 = new stdClass();
$prompt2->id = 2;
$prompt2->name = '提示2';
$prompt2->desc = '描述2';
$prompt2->module = 'task';
$prompt2->status = 'draft';

$originalPrompt2 = new stdClass();
$originalPrompt2->id = 2;
$originalPrompt2->name = '提示2';
$originalPrompt2->desc = '描述2';
$originalPrompt2->module = 'task';
$originalPrompt2->status = 'active';
$originalPrompt2->createdBy = 'admin';

r($aiTest->updatePromptTest($prompt2, $originalPrompt2)) && p() && e('1');

// 测试步骤3：仅修改状态为active（发布）
$prompt3 = new stdClass();
$prompt3->id = 3;
$prompt3->name = '提示3';
$prompt3->desc = '描述3';
$prompt3->module = 'bug';
$prompt3->status = 'active';

$originalPrompt3 = new stdClass();
$originalPrompt3->id = 3;
$originalPrompt3->name = '提示3';
$originalPrompt3->desc = '描述3';
$originalPrompt3->module = 'bug';
$originalPrompt3->status = 'draft';
$originalPrompt3->createdBy = 'admin';

r($aiTest->updatePromptTest($prompt3, $originalPrompt3)) && p() && e('1');

// 测试步骤4：无效ID更新
$prompt4 = new stdClass();
$prompt4->id = 999;
$prompt4->name = '不存在的提示';
$prompt4->desc = '不存在的描述';
$prompt4->module = 'story';
$prompt4->status = 'active';

r($aiTest->updatePromptTest($prompt4, null)) && p() && e('1');

// 测试步骤5：名称重复验证
$prompt5 = new stdClass();
$prompt5->id = 4;
$prompt5->name = '提示2';
$prompt5->desc = '重复名称测试';
$prompt5->module = 'user';
$prompt5->status = 'active';

r($aiTest->updatePromptTest($prompt5, null)) && p('name:0') && e('该名称已使用，请尝试其他名称。');

// 测试步骤6：必填字段验证
$prompt6 = new stdClass();
$prompt6->id = 5;
$prompt6->name = '';
$prompt6->desc = '空名称测试';
$prompt6->module = 'project';
$prompt6->status = 'active';

r($aiTest->updatePromptTest($prompt6, null)) && p('name:0') && e('『name』不能为空。');